# -*- coding: utf-8 -*-
# @Time    : 2021/4/15 16:27
# @Author  : xxue
# @Email   : x_xue1212@163.com
# @File    : 用户密码复杂度验证.py
# @Software: PyCharm

# 用户密码复杂度验证（封装成函数）
# 长度超过8位（必须） +1
# 包括大、小写、字母、数字、其他符号，以上四种至少三种 +1
# 不能有长度超过或等于3的子串重复  +1
# 密码的评分等级，默认2分，以上条件满足一条加1分
# 返回密码的评分等级，及要改进的点：
# 如 return 3，[‘长度小于8’，‘密码没有由3种以上字符组成’]
import string


def password_validation():
    global security_level
    print("输入密码".center(50, '*'))
    while 1:
        #  密码小于8位，调用函数，重新输入密码
        print("密码必须包括大、小写，字母，数字，其他特殊符号")
        passwd = input("请输入密码：")

        security_level = 2
        # 默认安全等级为2

        if len(passwd) < 8:
            print("密码小于8位，请重新输入：")
            password_validation()
        else:
            legal(passwd)


def legal(passwd):
    # 判断密码是否合法
    print("判断合法性".center(50, '*'))
    global security_level

    passwd = list(passwd)
    # str转list

    # 定义四个列表分别储存大写字母，小写字母，数字，特殊字符
    list_upper = []
    list_lower = []
    list_num = []
    list_punctuation = []

    # 添加值
    for index, item in enumerate(passwd):
        if item.isupper():
            list_upper.append(item)
        elif item.islower():
            list_lower.append(item)
        elif item.isdigit():
            list_num.append(item)
        elif item in string.punctuation:
            list_punctuation.append(item)

    # 如果四个列表都不为空时，密码合法
    if list_punctuation and list_num and list_lower and list_upper:
        print("密码合法")

        security_level += 1
        print(f"安全等级为{security_level}")
        # 安全等级加1

        repeat(''.join(passwd))
    else:
        print("密码不合法")

def repeat(passwd):
    global security_level
    print("判断重复性".center(50, '*'))
    # 判断是否有长度大于3的字串重复
    for i in range(len(passwd)):
        if passwd.count(passwd[i:i+3])>=2:
            if i+3 <= len(passwd):
                print("密码有重复")
        security_level += 1
        print(f"安全等级：{security_level}")
        break

password_validation()
# 验证是否合法

